Делаем скриншоты веб-страниц в R

Пакет webshot позволяет делать скриншоты веб-страниц напрямую из R/RStudio. Также есть возможность делать скриншоты shiny приложений (appshot()) и RMarkdown документов (rmdshot()).

Устанавливаем с помощью стандартной команды install.packages("webshot"). Также для работы пакета требуется установка PhantomJS. Ставим командой webshot::install_phantomjs().

Подгружаем библиотеку.

В пакете основная функция - это webshot. Она требует на вход один обязательный параметр - URL, по умолчанию сохраняет изображение с названием webshot.png. Если дефолтное название изображения не нравится, то необходимо указывать его в параметре file. По умолчанию все изображения сохраняются с размером 992х744.

Посмотрим на параметры. Они все доступны по справке.

webshot(url = NULL, file = "webshot.png", vwidth = 992, vheight = 744, cliprect = NULL, selector = NULL, expand = NULL, delay = 0.2, zoom = 1, eval = NULL, debug = FALSE, useragent = NULL)

Параметр vwidth отвечает за ширину области просмотра (это ширина окна браузера), vheight - за высоту, cliprect - это прямоугольник отсечения и отвечает за обрезку изображения (опция несовместима с параметром selector), параметр selector - это CSS селектор, параметр expand отвечает за то, насколько пикселей нужно расширить прямоугольник отсечения, параметр delay отражает время задержки перед тем, как сделать скриншот (например, если страница подгружается), параметр zoom - это коэффициент масштабирования, который увеличивает или уменьшает количество пикселей по вертикали или горизонтали, eval - это необязательная строка с кодом на JavaScript, которая будет оцениваться после открытия браузера и ожидания задержки, но перед вычислением области отсечения и созданием снимака экрана (здесь нужно смотреть документацию), debug - распечатывает отладочные сообщения из PhantomJS и CasperJS, useragent - заголовок User-Agent, используемый для запроса URL-адреса, то есть это http-заголовок, указывающий на то, что для разных пользователей предоставляется разный контент, позволяет избегать проблем с рендерингом некотрых веб-сайтов.

Посмотрим, как работает функция. Сделаем скриншот с сайта https://www.hbo.com/ и сохраним его в файл hbo.png.

Для того, чтобы открыть изображение, воспользуемся пакетом magick. Для своей работы он требует установки в операционную систему ImageMagick.

В данном случае у нас сохранилась вся страница. Чтобы сохранить только ту область, которую на данный момент отображает брузер, пропишем следующим образом.

Используем селекторы.

Используем селекторы и расширяем прямоугольник отсечения.

Теперь посмотрим на параметр zoom, уменьшим изображение.

Отметим, что функция webshot() векторизована, то есть может принимать вектор url-адресов и сохранять сразу несколько изображений (векторы должны быть равной длины).

Либо можно сохранить изображение в несколько файлов разных форматов.

Если нужно изменить размеры изображения, то можно изменить их в процессе создания скриншота через параметры vwidth и vheight.

Если же скриншот сделан, возможности его сделать во второй раз уже нет, то можно манипулировать размером изображения через ImageMagick (функция resize()) и OptiPNG (функция shrink()).

Более подробно:

https://github.com/wch/webshot

https://wch.github.io/webshot/articles/intro.html